import { LoginResponse } from '@/types/data';
import { RootThunkAction } from '@/types/store';
import { http } from '@/utils/http';
import { clearToken, setToken } from '@/utils/token';

// 登录 action
// 定义 login 接口的传参类型
type LoginParams = { mobile: string; code: string };

// 定义返回值的类型
// type LoginResponse = {
//   message: string;
//   data: Token;
// };

// 登录获取token
export const login = (value: LoginParams): RootThunkAction => {
  // 原来 action creator
  // return {type: 'xxx', payload: 'yyy'}
  return async (dispatch, getState) => {
    // 发起登录网络请求
    const res = await http.post<LoginResponse>('/authorizations', value);
    console.log('登录res==>', res);

    // 保存到本地
    setToken(res.data.data);

    // 发action,把token 保存到 reducer
    dispatch({ type: 'login/token', payload: res.data.data });
  };
};

// 发送验证码
export const getCode = (mobile: string): RootThunkAction => {
  return async (dispatch) => {
    // 发起验证码请求
    await http.get(`/sms/codes/${mobile}`);
  };
};

// 登出，清空保存的token
export const logout = (): RootThunkAction => {
  return (dispatch) => {
    // 1 清空本地token
    clearToken();
    // 2 清空reducer中token，复用login的保存token action
    dispatch({
      type: 'login/token',
      payload: { token: '', refresh_token: '' },
    });
  };
};
